トレリス


トレリスビューは、グリッド内の一連のセルにデータを配置するグループ化方式です。このビューでは、データを一目で相互比較でき、すべてのデータを系統的に配置できます。ある列のカードを別の列にドラッグすると、グループ、およびその基になるデータ値が修正されます。

トレリスグループは、以下のレイアウトエンジンで使用できます。

  • グリッドレイアウトによるトレリスビュー
  • カードレイアウトによるトレリスビュー

グリッドレイアウトによるトレリスビュー

このビューは基本的に、垂直のリストとしてグループ化されたグリッドビューです。各行は、水平方向または垂直方向のグループ化方式を使用してレイアウトされます。

グリッドレイアウトによるトレリスグループを実装するには、次の手順を実行します。

サンプルコード

  1. DataView参照の後に、次の参照を追加します。
    <link rel="stylesheet" type="text/css" href="[Your Stylesheet Path]/gc.spread.views.trellisgrouping.10.0.0.css"> 
    <script src="[Your Script Path]/gc.spread.views.trellisgrouping.10.0.0.min.js"></script>
    <script src="data/timelineBoard.js" type="text/javascript"></script>
  2. bodyタグ内にdivタグを追加して、ページ内のコンテナとしてDOM要素を含めます。
    <div style="height: 100%; position: relative">
            <div class="button-container">
                <button id="normal" type="button" class="btn btn-default" onclick="changeToNormalLayout()">Default</button>
                <button id="trellis" type="button" class="btn btn-default active" onclick="changeToTrellisLayout()">Trellis
            </button>
            </div>
            <div style="height:90%;">
                <div id="grid1" style="height:100%;"></div>
            </div>
    </div>
  3. rowTemplate定義を追加してから、列を定義します。 ``` var rowTemplate = '

    ' +

            '<div class="group-item-container-inner {{? it.progress==100}}finish{{?? it.progress>=80}}eighty-per{{?? it.progress>=50}}fifty-per{{?? it.progress>=30}}thirty-per{{??}}start{{?}}">' +
            '<div data-column="title" class="group-item-title  {{? it.progress==100}}finish-head{{?? it.progress>=80}}eighty-per-head{{?? it.progress>=50}}fifty-per-head{{?? it.progress>=30}}thirty-per-head{{??}}start-head{{?}}"></div>' +
            '<div data-column="photo" class="group-photo-container"></div>' +
            '<div data-column="description" class="group-item-description"></div>' +
            '</div></div>';
    
        var photoPresenter = '<img class="employee-photo" src={{=it.photo}} />';
        var columns = [{
            id: 'title',
            name: 'title',
            dataField: 'title'
        }, {
            id: 'description',
            name: 'description',
            dataField: 'description'
        }, {
            id: 'photo',
            dataField: 'photo',
            presenter: photoPresenter
        }, {
            id: 'progress',
            dataField: 'progress'
        }];
        var TrellisGrouping = new GC.Spread.Views.Plugins.TrellisGrouping({
            panelUnitWidth: 190
    });
4.  DIVタグのグリッドIDを呼び出し、コードを初期化します。
var dataView = new GC.Spread.Views.DataView(document.getElementById('grid1'), data, columns, new GC.Spread.Views.Plugins.GridLayout({
            grouping: [{
                field: 'work',
                header: {
                    height: 24
                }
            }, {
                field: 'category',
                header: {
                    height: 24
                }
            }],
            rowTemplate: rowTemplate,
            rowHeight: 120,
            groupStrategy: TrellisGrouping
    }));
5.  デフォルトビューとトレリスビューを切り替える関数を追加します。
function changeToNormalLayout() {
            $('#normal').addClass('active');
            $('#trellis').removeClass('active');
            dataView.data.groupDescriptors = null;
            var options = dataView.options;
            options.groupStrategy = null;
            options.rowHeight = 40;
            options.rowTemplate = null;
            dataView.invalidate();
        }

        function changeToTrellisLayout() {
            $('#normal').removeClass('active');
            $('#trellis').addClass('active');
            dataView.data.groupDescriptors = [{
                field: 'work',
                header: {
                    height: 24
                }
            }, {
                field: 'category',
                header: {
                    height: 24
                }
            }];
            var options = dataView.options;
            options.groupStrategy = TrellisGrouping;
            options.rowHeight = 120;
            options.rowTemplate = rowTemplate;
            dataView.invalidate();
    }

## カードレイアウトによるトレリス

このグループ化方式では、個々の行を、同じ高さと幅を持つ1つのカードアイテムとみなします。このビューは基本的に、グループ化されたカードレイアウトです。ユーザーはドラッグアンドドロップを使用して、グループを並び替えることができます。次の例では、カテゴリ別にグループ化したカードリストを表示します。

カードレイアウトによるトレリスグループを実装するには、次の手順を実行します。

 ![](images/trellis_card.png)

### サンプルコード

1.  DataView参照の後に、次の参照を追加します。
<link rel="stylesheet" type="text/css" href="./css/bootstrap-snippet.min.css"> 
<link rel="stylesheet" type="text/css" href="./css/gc.spread.views.cardlayout.10.0.0.css"> 
<link rel="stylesheet" type="text/css" href="./css/gc.spread.views.trellisgrouping.10.0.0.css">  
<script src="scripts/gc.spread.views.cardlayout.10.0.0.min.js" type="text/JavaScript"></script>
<script src="scripts/gc.spread.views.trellisgrouping.10.0.0.min.js" type="text/JavaScript"></script>
<script src="data/flashcard.js" type="text/javascript"></script>
2.  **body**タグ内に**div**タグを追加して、ページ内のコンテナとしてDOM要素を含めます。
<div style="height: 100%; position: relative">
        <div class="button-container">
            <button id="normal" type="button" class="btn btn-default" onclick="changeToNormalLayout()">Default</button>
            <button id="trellis" type="button" class="btn btn-default active" onclick="changeToTrellisLayout()">Trellis
        </button>
        </div>
        <div style="height:85%;">
            <div id="grid1" style="height:100%;"></div>
        </div>
</div>
3.  rowTemplate定義を追加してから、列を定義します。
var rowTemplate = '<div class="group-item-container">' +
            '<div class="image-container" data-column="image"></div>' +
            '<div class="name-container" data-column="name"></div>' +
            '{{?it.currentCategory===it.category}}<div class="correct-container"><div class="correct-mark"></div></div>{{?}}' +
            '</div>';

        var imagePresenter = '<img class="flash-image" src={{=it.image}} />';
        var columns = [{
            id: 'image',
            dataField: 'image',
            presenter: imagePresenter
        }, {
            id: 'name',
            dataField: 'name'
        }];

        var groups = ['animal', 'weather', 'emotion', 'shape'];

        data.forEach(function(item) {
            item.currentCategory = getRandCategory(item.category, groups);
        });
        var TrellisGrouping = new GC.Spread.Views.Plugins.TrellisGrouping({
            panelUnitWidth: 300,
            gapSize: 6
    });
4.  DIVタグのグリッドIDを呼び出し、コードを初期化します。
var dataView = new GC.Spread.Views.DataView(document.getElementById('grid1'), data, columns, new GC.Spread.Views.Plugins.CardLayout({
            cardHeight: 160,
            cardWidth: 150,
            grouping: [{
                field: 'currentCategory',
                preDefinedGroups: groups,
                header: {
                    height: 40
                }
            }],
            groupStrategy: TrellisGrouping,
            rowTemplate: rowTemplate
    }));
5.  デフォルトビューとトレリスビューを切り替える関数を追加します。
function getRandCategory(correctCategory, groups) {
            return groups[Math.floor(Math.random() * 8)] || correctCategory;
        }

        function changeToNormalLayout() {
            $('#normal').addClass('active');
            $('#trellis').removeClass('active');
            var options = dataView.options;
            options.groupStrategy = null;
            dataView.invalidate();
        }

        function changeToTrellisLayout() {
            $('#normal').removeClass('active');
            $('#trellis').addClass('active');
            var options = dataView.options;
            options.groupStrategy = TrellisGrouping;
            dataView.invalidate();
    }

```